package com.hl.payServer.model.enums;

/**
 * 交易状态
 */
public enum TradeState {

    /**
     * 支付成功
     * 交易支付成功
     */
    SUCCESS("SUCCESS"),

    /**
     * 支付失败
     * 交易失败成功
     */
    FAIL("FAIL"),

    /**
     * 退款
     */
    REFUND("REFUND"),

    /**
     * 未支付, 用户未支付，交易失败
     */
    NOTPAY("NOTPAY"),

    /**
     * 已关闭
     * 未付款交易超时关闭，或主动关闭
     */
    CLOSED("CLOSED"),

    /**
     * 交易创建，等待买家付款
     * 该笔交易因为业务规则要求，需要用户输入支付密码（刷卡支付）
     */
    USERPAYING("USERPAYING"),
    /**
     * 已接收，等待扣款（刷卡支付）
     */
    ACCEPT("ACCEPT"),

    /**
     * 付款处理中
     */
    //PAYING("PAYING"),

    /**
     * 支付失败(其他原因，如银行返回失败)
     */
    PAYERROR("PAYERROR"),

    /**
     * 交易结束，不可退款
     */
    FINISHED("FINISHED"),

    /**
     * 已撤销（刷卡支付）
     */
    REVOKED("REVOKED"),

    /**
     * 银行端超时（刷卡支付）
     */
    BANKERROR("BANKERROR"),
    
    /**
     * 系统超时（刷卡支付）
     */
    SYSTEMERROR("SYSTEMERROR"),

    /**
     * 调用第三方异常或是解析返回值异常
     */
    EXCEPTION("EXCEPTION");

    private String type;

    TradeState(String type){
        this.type = type;
    }

    public String type(){
        return type;
    }

    public static TradeState from(String s){
        for (TradeState tt : TradeState.values()){
            if (tt.type().equals(s)){
                return tt;
            }
        }
        throw new IllegalArgumentException("unknown trade type: " + s);
    }
}
